perm filename GFTYP.PSC[MF,ALS] blob
sn#759243 filedate 1984-06-24 generic text, type T, neo UTF8
{3:}{$D-,W+}{$D+}PROGRAM GFTYPE(GFFILE,OUTPUT);LABEL{4:}9999;{:4}
CONST{5:}LINELENGTH=79;TERMINALLINE=150;TOPPIXEL=300;BOTPIXEL=-50;
LEFTPIXEL=-150;RIGHTPIXEL=300;{:5}TYPE{8:}ASCIICODE=32..126;{:8}{9:}
TEXTFILE=PACKED FILE OF CHAR;{:9}{20:}EIGHTBITS=0..255;
BYTEFILE=PACKED FILE OF EIGHTBITS;{:20}{44:}PIXEL=0..1;{:44}VAR{10:}
XORD:ARRAY[CHAR]OF ASCIICODE;XCHR:ARRAY[0..255]OF CHAR;{:10}{21:}
GFFILE:BYTEFILE;{:21}{23:}CURLOC:INTEGER;{:23}{25:}WANTSMNEMONI:BOOLEAN;
WANTSPIXELS:BOOLEAN;{:25}{27:}BUFFER:ARRAY[0..TERMINALLINE]OF ASCIICODE;
{:27}{30:}BUFPTR:0..TERMINALLINE;{:30}{37:}TEXTPTR:0..LINELENGTH;
TEXTBUF:ARRAY[1..LINELENGTH]OF ASCIICODE;{:37}{43:}X,Y,Z:INTEGER;
PAINTSWITCH:PIXEL;{:43}{45:}
IMAGEARRAY:PACKED ARRAY[BOTPIXEL..TOPPIXEL,LEFTPIXEL..RIGHTPIXEL]OF
PIXEL;{:45}{48:}TOTALCHARS:INTEGER;CHARPTR:ARRAY[0..255]OF INTEGER;
GFPREVPTR:INTEGER;CHARACTERCOD:INTEGER;{:48}{61:}DESIGNSIZE:INTEGER;
MINX,MAXX,MINY,MAXY:INTEGER;GFMINX,GFMAXX,GFMINY,GFMAXY:INTEGER;
HPPP,VPPP:INTEGER;CHECKSUM:INTEGER;POSTLOC:INTEGER;{:61}{66:}A:INTEGER;
M,N,O,P,Q:INTEGER;BADCHAR:BOOLEAN;{:66}PROCEDURE INITIALIZE;
VAR I:INTEGER;BEGIN WRITELN('This is GFtype, Version 0.0');{11:}
FOR I:=0 TO 31 DO XCHR[I]:='?';XCHR[32]:=' ';XCHR[33]:='!';
XCHR[34]:='"';XCHR[35]:='#';XCHR[36]:='$';XCHR[37]:='%';XCHR[38]:='&';
XCHR[39]:='''';XCHR[40]:='(';XCHR[41]:=')';XCHR[42]:='*';XCHR[43]:='+';
XCHR[44]:=',';XCHR[45]:='-';XCHR[46]:='.';XCHR[47]:='/';XCHR[48]:='0';
XCHR[49]:='1';XCHR[50]:='2';XCHR[51]:='3';XCHR[52]:='4';XCHR[53]:='5';
XCHR[54]:='6';XCHR[55]:='7';XCHR[56]:='8';XCHR[57]:='9';XCHR[58]:=':';
XCHR[59]:=';';XCHR[60]:='<';XCHR[61]:='=';XCHR[62]:='>';XCHR[63]:='?';
XCHR[64]:='@';XCHR[65]:='A';XCHR[66]:='B';XCHR[67]:='C';XCHR[68]:='D';
XCHR[69]:='E';XCHR[70]:='F';XCHR[71]:='G';XCHR[72]:='H';XCHR[73]:='I';
XCHR[74]:='J';XCHR[75]:='K';XCHR[76]:='L';XCHR[77]:='M';XCHR[78]:='N';
XCHR[79]:='O';XCHR[80]:='P';XCHR[81]:='Q';XCHR[82]:='R';XCHR[83]:='S';
XCHR[84]:='T';XCHR[85]:='U';XCHR[86]:='V';XCHR[87]:='W';XCHR[88]:='X';
XCHR[89]:='Y';XCHR[90]:='Z';XCHR[91]:='[';XCHR[92]:='\';XCHR[93]:=']';
XCHR[94]:='↑';XCHR[95]:='_';XCHR[96]:='`';XCHR[97]:='a';XCHR[98]:='b';
XCHR[99]:='c';XCHR[100]:='d';XCHR[101]:='e';XCHR[102]:='f';
XCHR[103]:='g';XCHR[104]:='h';XCHR[105]:='i';XCHR[106]:='j';
XCHR[107]:='k';XCHR[108]:='l';XCHR[109]:='m';XCHR[110]:='n';
XCHR[111]:='o';XCHR[112]:='p';XCHR[113]:='q';XCHR[114]:='r';
XCHR[115]:='s';XCHR[116]:='t';XCHR[117]:='u';XCHR[118]:='v';
XCHR[119]:='w';XCHR[120]:='x';XCHR[121]:='y';XCHR[122]:='z';
XCHR[123]:='{';XCHR[124]:='|';XCHR[125]:='}';XCHR[126]:='~';
FOR I:=127 TO 255 DO XCHR[I]:='?';{:11}{12:}
FOR I:=0 TO 127 DO XORD[CHR(I)]:=32;
FOR I:=32 TO 126 DO XORD[XCHR[I]]:=I;{:12}{26:}WANTSMNEMONI:=TRUE;
WANTSPIXELS:=TRUE;{:26}{38:}TEXTPTR:=0;{:38}{49:}
FOR I:=0 TO 255 DO CHARPTR[I]:=-1;TOTALCHARS:=0;{:49}{62:}GFMINX:=4096;
GFMAXX:=-4095;GFMINY:=4096;GFMAXY:=-4096;{:62}END;{:3}{7:}
PROCEDURE JUMPOUT;BEGIN GOTO 9999;END;{:7}{22:}PROCEDURE OPENGFFILE;
BEGIN RESET(GFFILE,'','/B:8');CURLOC:=0;END;{:22}{24:}
FUNCTION GETBYTE:INTEGER;VAR B:EIGHTBITS;
BEGIN IF EOF(GFFILE)THEN GETBYTE:=0 ELSE BEGIN READ(GFFILE,B);
CURLOC:=CURLOC+1;GETBYTE:=B;END;END;FUNCTION SIGNEDBYTE:INTEGER;
VAR B:EIGHTBITS;BEGIN READ(GFFILE,B);CURLOC:=CURLOC+1;
IF B<128 THEN SIGNEDBYTE:=B ELSE SIGNEDBYTE:=B-256;END;
FUNCTION GETTWOBYTES:INTEGER;VAR A,B:EIGHTBITS;BEGIN READ(GFFILE,A);
READ(GFFILE,B);CURLOC:=CURLOC+2;GETTWOBYTES:=A*256+B;END;
FUNCTION SIGNEDPAIR:INTEGER;VAR A,B:EIGHTBITS;BEGIN READ(GFFILE,A);
READ(GFFILE,B);CURLOC:=CURLOC+2;
IF A<128 THEN SIGNEDPAIR:=A*256+B ELSE SIGNEDPAIR:=(A-256)*256+B;END;
FUNCTION GETTHREEBYTE:INTEGER;VAR A,B,C:EIGHTBITS;BEGIN READ(GFFILE,A);
READ(GFFILE,B);READ(GFFILE,C);CURLOC:=CURLOC+3;
GETTHREEBYTE:=(A*256+B)*256+C;END;FUNCTION SIGNEDTRIO:INTEGER;
VAR A,B,C:EIGHTBITS;BEGIN READ(GFFILE,A);READ(GFFILE,B);READ(GFFILE,C);
CURLOC:=CURLOC+3;
IF A<128 THEN SIGNEDTRIO:=(A*256+B)*256+C ELSE SIGNEDTRIO:=((A-256)*256+
B)*256+C;END;FUNCTION SIGNEDQUAD:INTEGER;VAR A,B,C,D:EIGHTBITS;
BEGIN READ(GFFILE,A);READ(GFFILE,B);READ(GFFILE,C);READ(GFFILE,D);
CURLOC:=CURLOC+4;
IF A<128 THEN SIGNEDQUAD:=((A*256+B)*256+C)*256+D ELSE SIGNEDQUAD:=(((A
-256)*256+B)*256+C)*256+D;END;{:24}{29:}PROCEDURE INPUTLN;
VAR K:0..TERMINALLINE;BEGIN BREAK(TTY);RESET(TTY);
IF EOLN(TTY)THEN READLN(TTY);K:=0;
WHILE(K<TERMINALLINE)AND NOT EOLN(TTY)DO BEGIN BUFFER[K]:=XORD[TTY↑];
K:=K+1;GET(TTY);END;BUFFER[K]:=32;END;{:29}{31:}
FUNCTION GETINTEGER:INTEGER;VAR X:INTEGER;NEGATIVE:BOOLEAN;
BEGIN IF BUFFER[BUFPTR]=45 THEN BEGIN NEGATIVE:=TRUE;BUFPTR:=BUFPTR+1;
END ELSE NEGATIVE:=FALSE;X:=0;
WHILE(BUFFER[BUFPTR]>=48)AND(BUFFER[BUFPTR]<=57)DO BEGIN X:=10*X+BUFFER[
BUFPTR]-48;BUFPTR:=BUFPTR+1;END;
IF NEGATIVE THEN GETINTEGER:=-X ELSE GETINTEGER:=X;END;{:31}{32:}
FUNCTION LOWERCASIFY(C:ASCIICODE):ASCIICODE;
BEGIN IF(C>=65)AND(C<=90)THEN LOWERCASIFY:=C+32 ELSE LOWERCASIFY:=C;END;
{:32}{33:}PROCEDURE DIALOG;LABEL 1,2;VAR K:INTEGER;BEGIN REWRITE(TTY);
WRITELN(TTY,'This is GFtype, Version 0.0');{34:}
1:WRITE(TTY,'Mnemonic output? (default=yes, ? for help): ');
WANTSMNEMONI:=TRUE;INPUTLN;BUFFER[0]:=LOWERCASIFY(BUFFER[0]);
IF BUFFER[0]<>63 THEN WANTSMNEMONI:=(BUFFER[0]=121)OR(BUFFER[0]=49)OR(
BUFFER[0]=116)OR(BUFFER[0]=32)ELSE BEGIN WRITE(TTY,
'Type Y for complete listing,');WRITE(TTY,' N for none.');GOTO 1;
END{:34};{35:}2:WRITE(TTY,'Pixel output? (default=yes, ? for help): ');
WANTSPIXELS:=TRUE;INPUTLN;BUFFER[0]:=LOWERCASIFY(BUFFER[0]);
IF BUFFER[0]<>63 THEN WANTSPIXELS:=(BUFFER[0]=121)OR(BUFFER[0]=49)OR(
BUFFER[0]=116)OR(BUFFER[0]=32)ELSE BEGIN WRITE(TTY,
'Type Y for pixel listing,');WRITE(TTY,' N for none.');GOTO 2;END{:35};
{36:}WRITELN('Options selected:');
WRITE(' Mnemonic output = ',WANTSMNEMONI);
WRITE(' Pixel output = ',WANTSPIXELS);WRITELN('.');{:36};END;{:33}{39:}
PROCEDURE FLUSHTEXT;VAR K:0..LINELENGTH;
BEGIN IF TEXTPTR>0 THEN BEGIN IF WANTSMNEMONI THEN BEGIN WRITE('[');
FOR K:=1 TO TEXTPTR DO WRITE(XCHR[TEXTBUF[K]]);WRITELN(']');END;
TEXTPTR:=0;END;END;{:39}{40:}PROCEDURE OUTTEXT(C:ASCIICODE);
BEGIN IF TEXTPTR=LINELENGTH-2 THEN FLUSHTEXT;TEXTPTR:=TEXTPTR+1;
TEXTBUF[TEXTPTR]:=C;END;{:40}{41:}PROCEDURE PRINTSCALED(S:INTEGER);
VAR DELTA:INTEGER;BEGIN IF S<0 THEN BEGIN WRITE('-');S:=-S;END;
WRITE(S DIV 65536:1);S:=10*(S MOD 65536)+5;IF S<>5 THEN BEGIN DELTA:=10;
WRITE('.');REPEAT IF DELTA>65536 THEN S:=S+32768-(DELTA DIV 2);
WRITE(CHR(ORD('0')+(S DIV 65536)));S:=10*(S MOD 65536);DELTA:=DELTA*10;
UNTIL S<=DELTA;END;END;{:41}{50:}FUNCTION FIRSTPAR(O:EIGHTBITS):INTEGER;
BEGIN CASE O OF 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,
22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,
46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63:FIRSTPAR:=O-0;
64,69,246,241:FIRSTPAR:=GETBYTE;65,70,242:FIRSTPAR:=GETTWOBYTES;
66,71,243:FIRSTPAR:=GETTHREEBYTE;72,244,245:FIRSTPAR:=SIGNEDQUAD;
240,67,68,247,248,249,250,251,252,253,254,255:FIRSTPAR:=0;
73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,
97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115
,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133
,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151
,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169
,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187
,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205
,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223
,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239:
FIRSTPAR:=O-156;END;END;{:50}{51:}FUNCTION DOCHAR:BOOLEAN;
LABEL 9998,9999;VAR O:EIGHTBITS;P,Q:INTEGER;BEGIN DOCHAR:=TRUE;
WHILE TRUE DO{52:}BEGIN A:=CURLOC;O:=GETBYTE;P:=FIRSTPAR(O);
IF EOF(GFFILE)THEN BEGIN WRITE(' ','Bad GF file: ',
'the file ended prematurely','!');JUMPOUT;END;{53:}IF O<=67 THEN{57:}
BEGIN IF WANTSMNEMONI THEN WRITE(' ','paint ',P:1);
IF WANTSPIXELS THEN BEGIN IF X+P>RIGHTPIXEL THEN BEGIN IF X<=RIGHTPIXEL
THEN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','character extends too far to the right for me');
END;WRITELN;END;X:=X+P;
END ELSE WHILE P>0 DO BEGIN IMAGEARRAY[Y,X]:=PAINTSWITCH;X:=X+1;P:=P-1;
END;END ELSE X:=X+P;
IF PAINTSWITCH=1 THEN PAINTSWITCH:=0 ELSE PAINTSWITCH:=1;END{:57}
ELSE IF(72<=O)AND(O<=239)THEN{58:}
BEGIN IF WANTSMNEMONI THEN BEGIN WRITELN;BEGIN FLUSHTEXT;
WRITE(A:1,': ','newrow ',P:1);END;END;Y:=Y-1;Z:=Z+P;X:=Z;PAINTSWITCH:=1;
END{:58}
ELSE CASE O OF 69,70,71:BEGIN IF WANTSMNEMONI THEN BEGIN WRITELN;
BEGIN FLUSHTEXT;WRITE(A:1,': ','skip',O-68:1,' ',P:1);END;END;{59:}
BEGIN IF WANTSMNEMONI THEN BEGIN WRITELN;BEGIN FLUSHTEXT;
WRITE(A:1,': ','skip ',P:1);END;END;Y:=Y-(P+1);X:=Z;PAINTSWITCH:=1;
END{:59};END;{54:}240:IF WANTSMNEMONI THEN WRITE(' ','nop');
247:BEGIN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','preamble command within a page!');END;WRITELN;END;
GOTO 9998;END;248,249:BEGIN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','postamble command within a page!');END;WRITELN;END;
GOTO 9998;END;67:BEGIN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','boc occurred before eoc');END;WRITELN;END;
GOTO 9998;END;68:BEGIN IF WANTSMNEMONI THEN BEGIN WRITELN;
BEGIN FLUSHTEXT;WRITE(A:1,': ','eoc');END;END;WRITELN(' ');GOTO 9999;
END;{:54}241,242,243,244:{55:}BEGIN IF WANTSMNEMONI THEN BEGIN WRITELN;
BEGIN FLUSHTEXT;WRITE(A:1,': ','xxx ''');END;END;BADCHAR:=FALSE;
WHILE P>0 DO BEGIN Q:=GETBYTE;
IF(Q>=32)AND(Q<=126)THEN BEGIN IF WANTSMNEMONI THEN WRITE(XCHR[Q]);
END ELSE BADCHAR:=TRUE;P:=P-1;END;IF WANTSMNEMONI THEN WRITE('''');
IF BADCHAR THEN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','non-ASCII character in xxx command!');END;WRITELN;
END;END{:55};245:{56:}BEGIN IF WANTSMNEMONI THEN BEGIN WRITELN;
BEGIN FLUSHTEXT;WRITE(A:1,': ','yyy ',P:1,' (');END;END;
IF WANTSMNEMONI THEN BEGIN PRINTSCALED(P);WRITE(')');END;END{:56};
OTHERS:BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','undefined command ',O:1,'!');END;WRITELN;
END END{:53};END{:52};9998:WRITELN('!');DOCHAR:=FALSE;9999:END;{:51}
{60:}PROCEDURE READPOSTAMBL;VAR K:INTEGER;P,Q,M,V,W,C:INTEGER;
BEGIN POSTLOC:=CURLOC-1;
WRITELN('Postamble starts at byte ',POSTLOC:1,'.');P:=SIGNEDQUAD;
IF P<>GFPREVPTR THEN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','backpointer in byte ',CURLOC-4:1,' should be ',
GFPREVPTR:1,' not ',P:1,'!');END;WRITELN;END;DESIGNSIZE:=SIGNEDQUAD;
CHECKSUM:=SIGNEDQUAD;WRITE('design size = ',DESIGNSIZE:1,' (');
PRINTSCALED(DESIGNSIZE DIV 16);WRITELN(')');
WRITELN('check sum = ',CHECKSUM:1);HPPP:=SIGNEDQUAD;VPPP:=SIGNEDQUAD;
WRITE('hppp = ',HPPP:1,' (');PRINTSCALED(HPPP);WRITELN(')');
WRITE('vppp = ',VPPP:1,' (');PRINTSCALED(VPPP);WRITELN(')');
MINX:=SIGNEDQUAD;MAXX:=SIGNEDQUAD;MINY:=SIGNEDQUAD;MAXY:=SIGNEDQUAD;
WRITELN('min x = ',MINX:1,', max x = ',MAXX:1);
IF MINX<>GFMINX THEN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','min x should be ',GFMINX:1);END;WRITELN;END;
IF MAXX<>GFMAXX THEN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','max x should be ',GFMAXX:1);END;WRITELN;END;
WRITELN('min y = ',MINY:1,', max y = ',MAXY:1);
IF MINY<>GFMINY THEN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','min y should be ',GFMINY:1);END;WRITELN;END;
IF MAXY<>GFMAXY THEN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','max y should be ',GFMAXY:1);END;WRITELN;END;{64:}
REPEAT K:=GETBYTE;IF K=246 THEN BEGIN C:=FIRSTPAR(K);V:=SIGNEDQUAD;
W:=SIGNEDQUAD;P:=SIGNEDQUAD;
IF WANTSMNEMONI THEN WRITELN('Character ',C:1,' device width ',V:1,
' width ',W:1,' location ',P:1);
IF P<>CHARPTR[C MOD 256]THEN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','character location should be ',CHARPTR[C MOD 256]:1
,' not ',P:1);END;WRITELN;END;K:=240;END;UNTIL K<>240;{:64};{63:}
IF K<>249 THEN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','should be postpost!');END;WRITELN;END;
Q:=SIGNEDQUAD;IF Q<>POSTLOC THEN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','postamble pointer should be ',POSTLOC:1,' not ',Q:1
);END;WRITELN;END;M:=GETBYTE;IF M<>129 THEN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','identification byte should be ',129:1);END;WRITELN;
END;K:=CURLOC;M:=223;WHILE(M=223)AND NOT EOF(GFFILE)DO M:=GETBYTE;
IF NOT EOF(GFFILE)THEN BEGIN WRITE(' ','Bad GF file: ',
'signature in byte ',CURLOC-1:1,' should be 223','!');JUMPOUT;
END ELSE IF CURLOC<K+4 THEN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','not enough signature bytes at end of file');END;
WRITELN;END;{:63};END;{:60}{65:}BEGIN INITIALIZE;DIALOG;{67:}OPENGFFILE;
O:=GETBYTE;
IF O<>247 THEN BEGIN WRITE(' ','Bad GF file: ',
'First byte isn''t start of preamble!','!');JUMPOUT;END;O:=GETBYTE;
IF O<>129 THEN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','identification byte should be ',129:1,' not ',O:1,
'!');END;WRITELN;END;O:=GETBYTE;WRITE('''');WHILE O>0 DO BEGIN O:=O-1;
WRITE(XCHR[GETBYTE]);END;WRITELN('''');{:67};{68:}
REPEAT GFPREVPTR:=CURLOC;{69:}REPEAT A:=CURLOC;O:=GETBYTE;
P:=FIRSTPAR(O);IF EOF(GFFILE)THEN BEGIN WRITE(' ','Bad GF file: ',
'the file ended prematurely','!');JUMPOUT;END;IF O=245 THEN BEGIN{56:}
BEGIN IF WANTSMNEMONI THEN BEGIN WRITELN;BEGIN FLUSHTEXT;
WRITE(A:1,': ','yyy ',P:1,' (');END;END;
IF WANTSMNEMONI THEN BEGIN PRINTSCALED(P);WRITE(')');END;END{:56};
O:=240;END ELSE IF(O>=241)AND(O<=244)THEN BEGIN{55:}
BEGIN IF WANTSMNEMONI THEN BEGIN WRITELN;BEGIN FLUSHTEXT;
WRITE(A:1,': ','xxx ''');END;END;BADCHAR:=FALSE;
WHILE P>0 DO BEGIN Q:=GETBYTE;
IF(Q>=32)AND(Q<=126)THEN BEGIN IF WANTSMNEMONI THEN WRITE(XCHR[Q]);
END ELSE BADCHAR:=TRUE;P:=P-1;END;IF WANTSMNEMONI THEN WRITE('''');
IF BADCHAR THEN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','non-ASCII character in xxx command!');END;WRITELN;
END;END{:55};O:=240;END;UNTIL O<>240;{:69};
IF O<>248 THEN BEGIN IF O<>67 THEN BEGIN WRITE(' ','Bad GF file: ',
'byte ',CURLOC-1:1,' is not boc (',O:1,')','!');JUMPOUT;END;
WRITELN(' ');WRITE(CURLOC-1:1,': beginning of char ');{70:}A:=CURLOC;
TOTALCHARS:=TOTALCHARS+1;CHARACTERCOD:=SIGNEDQUAD;P:=SIGNEDQUAD;
IF CHARPTR[CHARACTERCOD MOD 256]<>P THEN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','previous character pointer wrong');END;WRITELN;END;
CHARPTR[CHARACTERCOD MOD 256]:=GFPREVPTR;MINX:=SIGNEDQUAD;
MAXX:=SIGNEDQUAD;MINY:=SIGNEDQUAD;MAXY:=SIGNEDQUAD;
IF MINX<GFMINX THEN GFMINX:=MINX;IF MINY<GFMINY THEN GFMINY:=MINY;
IF MAXX>GFMINX THEN GFMAXX:=MAXX;IF MAXY>GFMAXY THEN GFMAXY:=MAXY;
Z:=SIGNEDQUAD;
IF WANTSMNEMONI THEN WRITELN(MINX:1,'<=x<=',MAXX:1,' ',MINY:1,'<=y<=',
MAXY:1,' z=',Z:1);IF(Z>MAXX)OR(Z<MINX)THEN BEGIN BEGIN FLUSHTEXT;
WRITE(A:1,': ','! ','Parameter z is out of range');END;WRITELN;END;
IF(MINX<LEFTPIXEL)OR(MAXX>RIGHTPIXEL)OR(MINY<BOTPIXEL)OR(MAXY>TOPPIXEL)
THEN BEGIN WRITE('Pixels beyond printable limits');WANTSPIXELS:=FALSE;
END;IF WANTSPIXELS THEN{46:}BEGIN Y:=MINY;
WHILE Y<=MAXY DO BEGIN X:=MINX;
WHILE X<=MAXX DO BEGIN IMAGEARRAY[Y,X]:=0;X:=X+1;END;Y:=Y+1;END;END{:46}
;Y:=MAXY;X:=Z;PAINTSWITCH:=1;{:70};
IF NOT DOCHAR THEN BEGIN WRITE(' ','Bad GF file: ',
'char ended unexpectedly','!');JUMPOUT;END;IF WANTSPIXELS THEN{47:}
BEGIN Y:=MAXY;WHILE Y>=MINY DO BEGIN X:=MINX;
WHILE X<=MAXX DO BEGIN IF IMAGEARRAY[Y,X]=0 THEN WRITE(' ')ELSE WRITE(
'*');X:=X+1;END;WRITELN(' ');Y:=Y-1;END;END{:47};END UNTIL O=248;{:68};
WRITELN;READPOSTAMBL;WRITE('Font had ',TOTALCHARS:1,' character');
IF TOTALCHARS<>1 THEN WRITE('s');WRITE(' altogether');9999:END.{:65}